package com.hadluo.qq.server.service;

import com.hadluo.qq.server.entity.Group;
import com.hadluo.qq.server.entity.GroupMember;

import java.util.List;

public interface GroupService {
    /**
     * 创建群组
     * @param group 群组信息
     * @param ownerUserId 群主用户ID
     * @param memberUserIds 初始成员用户ID列表
     * @return 创建的群组
     */
    Group createGroup(Group group, Long ownerUserId, List<Long> memberUserIds);

    /**
     * 获取用户的群组列表
     * @param userId 用户ID
     * @return 群组列表
     */
    List<Group> getUserGroups(Long userId);

    /**
     * 获取群组成员列表
     * @param groupId 群组ID
     * @return 成员列表
     */
    List<GroupMember> getGroupMembers(Long groupId);

    /**
     * 添加群成员
     * @param groupId 群组ID
     * @param userIds 用户ID列表
     */
    void addGroupMembers(Long groupId, List<Long> userIds);

    /**
     * 移除群成员
     * @param groupId 群组ID
     * @param userId 用户ID
     */
    void removeGroupMember(Long groupId, Long userId);

    /**
     * 更新群组信息
     * @param group 群组信息
     * @return 更新后的群组
     */
    Group updateGroup(Group group);

    /**
     * 解散群组
     * @param groupId 群组ID
     * @param operatorUserId 操作者用户ID（必须是群主）
     */
    void dissolveGroup(Long groupId, Long operatorUserId);

    /**
     * 更新群成员角色
     * @param groupId 群组ID
     * @param userId 用户ID
     * @param role 新角色
     */
    void updateMemberRole(Long groupId, Long userId, Integer role);

    /**
     * 更新群成员昵称
     * @param groupId 群组ID
     * @param userId 用户ID
     * @param alias 群昵称
     */
    void updateMemberAlias(Long groupId, Long userId, String alias);

    /**
     * 搜索群组
     * @param keyword 关键词
     * @return 群组列表
     */
    List<Group> searchGroups(String keyword);

    /**
     * 获取群组信息
     * @param groupId 群组ID
     * @return 群组信息
     */
    Group getGroupById(Long groupId);

    /**
     * 获取群组信息
     * @param groupNumber 群号
     * @return 群组信息
     */
    Group getGroupByNumber(String groupNumber);

    /**
     * 更新群组最后一条消息
     * @param groupId 群组ID
     * @param lastMessage 最后一条消息
     * @param lastMessageTime 最后一条消息时间
     */
    void updateGroupLastMessage(Long groupId, String lastMessage, Long lastMessageTime);
}